Linux介绍
Linux:在1991年10月被Linus Torvalds(林纳斯·托瓦兹)创建,并于1994年发布了Linux-v1.0。是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的操作系统。
Linux特点
Linux是一款完全免费的操作系统,用户可以通过各种渠道下载使用。
Linux是一款完全开源的操作系统,用户可以任意修改其源代码。
Linux支持多用户,多任务的使用方式,对不同的用户有着不同的权利。
Linux具有良好的界面,同时具有字符界面和图形界面。
Linux支持多平台,可以运行在多种硬件平台上。
Linux内核高效稳定,可使用户方便地建立防火墙,服务器。
Linux注意事项
Linux严格区分大小写,大小写不同,命令不同。
Linux中所有内容以文件形式保存,包括硬件。
Linux和Windows不同,不靠扩展名来区分文件类型。
Linux所有的设备都需要先挂载之后才能使用。
Windows下的程序不能直接在Linux中安装运行。
Linux常用命令
此命令都是运行在Ubuntu系统中,不同的Linux系列,如Debian系列和Redhat命令大同小异。
显示目录文件
命令 | 说明 |
---|---|
ls -a | 显示所有的文件,包括隐含文件(以.开头) |
ls -l | 显示文件的详细信息,不包括隐含文件 |
ls -h | 以人性化形式显示文件,不包括隐含文件 |
ls -i | 查看文件的i结点,不包括隐含文件 |
文件信息字段
第一项第一个字母:文件的类型,-代表二进制文件,d代表目录,l代表软连接文件
第一项第二个字母到第四个字母:文件所有者可对文件的操作
第一项第五个字母到第七个字母:组内成员可对文件的操作
第一项第八个字母到第十个字母:其他用户可对文件的操作
三个字母为一组,从左到右分别是读(r),写(w),执行(x)
第二项:文件硬链接数
第三项:文件的所有者
第四项:文件的所属组
第五项:文件所占用的字节空间
第六项:文件最近的访问时间
第七项:文件名
目录处理命令
命令 | 说明 |
---|---|
mkdir -p dicname | 递归创建名为dicname的文件夹 |
mkdir dicname | 创建名为dicname的文件夹 |
cd dicname | 切换目录 |
cd .. | 返回上一级目录 |
pwd | 显示当前目录 |
rmdir dicname | 删除空目录 |
cp old new | 复制文件 |
cp -r old new | 复制目录 |
cp -p old new | 保留属性复制 |
mv old new | 剪切文件 |
rm filename | 删除文件 |
rm -r dicname | 删除目录 |
rm -f | 强制执行 |
文件处理命令
命令 | 说明 |
---|---|
touch filename | 创建名为filename的空文件 |
cat filename | 显示filename文件内容 |
cat -n filename | 显示filename文件内容,并显示行号 |
tac | 反向显示文件内容 |
less | 分页显示文件内容(pageup和pagedown) |
head -n m | 显示文件前m行 |
tail -n m | 显示文件后m行 |
链接命令
命令 | 说明 |
---|---|
ln filename hardlink | 生成链接到filename的硬链接 |
ln -s filename softlink | 生成链接到filename的软链接 |
硬链接
硬链接除了文件名所在地,其余信息都相同。
硬链接后,文件信息中的链接数会加1。
硬链接文件的i节点和源文件相同。
硬链接不能跨分区。
硬链接不能针对目录。
源文件丢失,仍然可以访问硬链接。
软链接
软链接类似于Windows中的快捷方式,有箭头指向。
软链接后,文件信息中的链接数不变。
软链接文件的i节点和源文件不同。
软链接可以跨分区。
软链接可以针对目录。
源文件丢失,不能访问软链接。
权限管理命令
命令 | 说明 |
---|---|
chmod op filename | 修改filename文件的权限 |
chmod -R op dicname | 修改dicname目录下所有文件的权限 |
chown own filename_or_dicname | 修改文件或目录的所有者 |
chgrp grp filename_or_dicname | 修改文件或目录的所属组 |
umask | 查看当前用户新建文件的缺省权限 |
文件权限
r:读权限,可以查看文件内容,如cat, tac, less, head, tail等
w:写权限,可以修改文件内容,如vi, vim等
x:执行权限,可以执行文件,如script, command等
目录权限
r:读权限,可以列出目录内容,如ls等
w:写权限,可以在目录中创建删除文件,如touch, mkdir, rmdir, rm等
x:执行权限,可以进入目录,如cd等
修改权限两种操作
u/g/o/a +/-/= r/w/x对所有者/所属组/其他用户/所有人 加/减/赋值 读/写/执行权限
如 chmod g+w, o-r filename 对filename的所属组添加写权限,对其他用户删除读权限
直接利用数字进行赋值权限
如 chmod 644 filename 对filename的所有者添加读写权限,对所属组和其他用户添加读权限
文件搜索命令
命令 | 说明 |
---|---|
find range condition | 查找range范围内符合条件的文件或目录 |
locate filename | 从文件资料库中查找文件 |
which command | 搜索命令所在目录及别名信息 |
whereis command | 搜索命令所在目录及帮助文档路径 |
grep string file | 在文件中搜索字符串匹配的行并输出 |
grep -i string file | 不区分字符串大小写搜索匹配的行并输出 |
grep -v string file | 在文件中排除与字符串匹配的行并输出 |
grep -n string file | 在文件中搜索字符串匹配的行并输出,并显示行数 |
find搜索匹配条件
*:匹配字符多个
如*init指以init结尾的文件名,*init*指包含init的文件名
?:匹配单个字符
如???init指以init结尾长度为7的文件名
帮助命令
命令 | 说明 |
---|---|
man command | 获得命令的帮助信息 |
whatis command | 查看命令的功能 |
apropos filename | 查看配置文件的简要信息 |
command –help | 查看命令的常见选项 |
help command | 查看shell内置命令的帮助信息 |
网络命令
命令 | 说明 |
---|---|
write username | 给用户发信息 |
wall | 发广播信息 |
ping ip | 对ip地址发数据包检测网络连通性,一直在发送 |
ping -c n ip | 对ip地址发数据包检测网络连通性,发送n次 |
ifconfig net_card ip | 配置网卡的ip地址 |
mail username | 查看发送的电子邮件 |
last | 列出登录系统的用户信息 |
lastlog | 查看所有用户最后一次登录的时间 |
lastlog -u userid | 查看用户id为userid(不是用户名)的用户最后一次登录时间 |
traceroute url | 查看数据包到主机间的路径 |
netstat -t | 显示网络中的TCP协议 |
netstat -u | 显示网络中的UDP协议 |
netstat -l | 监听网络服务 |
netstat -r | 查看路由表 |
netstat -n | 显示ip地址和端口号 |
关机重启命令
命令 | 说明 |
---|---|
shutdown -c | 取消上一个关机命令 |
shutdown -h +n | n分钟后关机 |
shutdown -h time | 到达时间time关机 |
shutdown -h now | 现在关机 |
shutdown -r +n | n分钟后重启 |
shutdown -r time | 到达时间time重启 |
shutdown -r now | 现在重启 |
修改系统默认运行级别
命令 | 说明 |
---|---|
vim /etc/inittab | 修改系统默认运行级别 |
runlevel | 查看系统运行级别 |
系统运行级别
0:关机
1:单用户模式
2:不完全多用户模式,不含 NFS服务
3:完全多用户模式务
4:未分配
5:图形界面
6:重启
用户配置文件
命令 | 说明 |
---|---|
less /etc/passwd | 查看用户信息文件 |
less /etc/shadow | 查看用户影子文件 |
less /etc/group | 查看组信息文件 |
less /etc/gshadow | 查看组影子文件 |
用户信息文件字段
第一个字段:用户名称
第二个字段:密码标志
第三个字段:用户ID(UID)
第四个字段:用户初始组ID(GID)
第五个字段:用户说明
第六个字段:家用户
第七个字段:登录后的shell
用户影子文件字段
第一个字段:用户名称
第二个字段:加密密码
第三个字段:密码最后一次修改时间
第四个字段:两次密码修改间隔
第五个字段:密码有效期
第六个字段:密码到期前的警告天数
第七个字段:密码过期后的宽限天数
第八个字段:账号失效时间
第九个字段:保留字段
组信息文件字段
第一个字段:组名称
第二个字段:组密码标志
第三个字段:组ID(GID)
第四个字段:组中附加用户
组影子文件字段
第一个字段:组名称
第二个字段:组密码
第三个字段:组管理员用户名
第四个字段:组中附加用户
用户管理命令
命令 | 说明 |
---|---|
useradd username | 添加新用户 |
useradd -u username | 添加新用户,手动指定用户id |
useradd -d username | 添加新用户,手动指定家目录 |
useradd -c username | 添加新用户,手动指定用户说明 |
useradd -G username | 添加新用户,手动指定附加组 |
useradd -g username | 添加新用户,手动指定初始组 |
useradd -s username | 添加新用户,手动指定登录shell |
passwd username | 设置用户密码 |
passwd -s username | 查询用户密码状态 |
passwd -l username | 暂时锁定用户 |
passwd -u username | 解锁用户 |
userdel username | 删除用户 |
change -l username | 列出用户的详细密码状态 |
change -d username | 修改密码最后一次更改日期 |
change -m username | 修改两次密码修改间隔 |
change -M username | 修改密码有效期 |
change -W username | 修改密码过期前警告天数 |
change -I username | 修改密码过期后宽限天数 |
change -E username | 修改账号失效时间 |
用户组管理命令
命令 | 说明 |
---|---|
groupadd groupname | 添加新用户组 |
groupadd -g groupname | 添加新用户,手动指定组id |
groupmod -g groupname | 修改组id |
groupmod -n groupname | 修改组名 |
groupdel groupname | 删除用户组 |
gpasswd -a groupname | 将用户加入用户组 |
gpasswd -a groupname | 将用户从用户组删除 |
文件系统管理命令
命令 | 说明 |
---|---|
df -a dirname | 显示文件的系统信息 |
df -h dirname | 以人性化方式显示文件的系统信息 |
df -a dirname | 显示文件的系统类型 |
du -a dicname | 显示每个子文件的磁盘占用量 |
du -h dicname | 以人性化方式显示每个子文件的磁盘占用量 |
du -s dicname | 统计总占用量 |
fdisk -l | 查看u盘的设备文件名 |
mount -t vfat device dicname | 将u盘文件名device挂载到dicname文件名中 |
umount device | 卸载挂载device |
终端常用命令
命令 | 说明 |
---|---|
Ctrl + Alt +t | 打开终端 |
Ctrl + d | 退出终端 |
Ctrl + c | 终止正在运行的程序 |
Ctrl + l | 清屏 |
Ctrl + s | 锁住终端 |
Ctrl + q | 解锁终端 |
Ctrl + r | 查找历史命令 |
^up | 查看上一个历史记录 |
^down | 查看下一个历史记录 |
su | 切换到root用户 |
su username | 切换到username用户 |
sudo command | 以root权限执行命令 |
TAB | 命令与文件补全 |
alias | 查看命令的别名 |
alias newname command | 给原命令起一个别名 |
重定向命令
命令 | 说明 |
---|---|
command > filename | 将正确命令的结果覆盖到filename文件中 |
command >> filename | 将正确命令的结果追加到filename文件中 |
command 2> filename | 将错误命令的结果覆盖到filename文件中 |
command 2>> filename | 将错误命令的结果追加到filename文件中 |
command &> filename | 将命令的结果覆盖到filename文件中(无论正确与否) |
command &>> filename | 将命令的结果追加到filename文件中(无论正确与否) |
command >> filename1 &>> filename2 | 将正确的命令结果追加到filename1,错误命令的结果追加到到filename2 |
多命令
命令 | 说明 |
---|---|
command1 ; command2 ; … | 多个命令顺序执行,命令1出错命令2也会执行 |
command1 && command2 && … | 逻辑与,命令1正确执行,命令2才会执行 |
command1 ll command2 ll … | 逻辑或,命令1不正确执行,命令2才会执行 |
command 2>> filename | 将错误命令的结果追加到filename文件中 |
command &> filename | 将命令的结果覆盖到filename文件中(无论正确与否) |
command &>> filename | 将命令的结果追加到filename文件中(无论正确与否) |
command >> filename1 &>> filename2 | 将正确的命令结果追加到filename1,错误命令的结果追加到到filename2 |
command1 l command2 | 管道符,命令1的正确输出作为命令2的操作对象 |
特殊符号
符号 | 说明 |
---|---|
? | 匹配一个任意字符 |
* | 匹配任意多个字符 |
[] | 匹配[]中任意一个字符 |
[-] | 匹配[]中任意一个字符,-代表范围,如0-9 |
[^] | 匹配不在[]中的任意一个字符 |
‘’ | 单引号将其作为一个整体,其中的所有特殊符号都是普通符号 |
“” | 双引号中$调用变量的值,`引用命令,\转义字符 |
`` | 反引号中的内容为系统命令 |
$ | 美元符号调用变量的值 |
\ | 反斜杠指转义符 |
# | 注释符 |
正则表达式
在Linux中,正则表达式是用来在文件中匹配符合条件的字符串,正则是包含匹配,grep,awk,sed等命令支持正则表达式。
在Linux中,通配符是用来匹配符合条件的文件名,通配符是完全匹配,ls,find,cp等命令不支持正则表达式,只能使用通配符进行匹配。
符号 | 说明 |
---|---|
* | 前一个字符匹配0次或任意多次 |
. | 匹配除换行符外任意一个字符 |
^ | 匹配行首 |
$ | 匹配行尾 |
[] | 匹配括号中指定的任意一个字符 |
[^] | 匹配除了括号中指定的任意一个字符 |
\ | 转义字符 |
{n} | 表示前面的字符出现n次 |
{n,} | 表示前面的字符出现不小于n次 |
{n,m} | 表示前面的字符至少出现n次,至多m次 |
字符处理命令
| 符号 | 说明 |
| cut -f n filename | 提取文件第n列 |
| cut -d interval -f n filename | 设定分隔符提取文件第n列 |
| printf “type_and_format” content | 格式化输出 |
| awk “condition1 {action1} condition2 {action2} …” filename | 对filename中符合condition的进行action操作 |
| awk “BEGIN{action} condition1 {action1} condition2 {action2} …” filename | 在对filename操作之前进行action操作 |
| awk “BEGIN{FS=’c’} condition1 {action1} condition2 {action2} …” filename | 以c为分隔符进行操作,默认分隔符为制表符 |
| awk “END{action} condition1 {action1} condition2 {action2} …” filename | 在对filename操作之后进行action操作 |
| sed -n | 把只经过sed处理的输出,原文件不变化 |
| sed -e | 允许对输入数据应用多条sed命令 |
| sed -i | 直接对文件进行修改,不显示输出 |
| sed a | 在当前行后添加一行或多行 |
| sed c | 对当前行替换 |
| sed i | 对当前行插入 |
| sed d | 删除指定的行 |
| sed p | 打印指定的行 |
| sed s | 字符替换,格式为”行范围/s/old_str/new_str/g” |
| sort | 以数值型排序 |
| sort -f | 忽略大小写排序 |
| sort -n | 以数值型排序 |
| sort -r | 反向排序 |
| sort -t | 指定分隔符,默认为制表符 |
| sort -k n[,m] | 按照指定的字段,从n开始到m结束 |
| wc | 输入字符串,Ctrl+d结束,统计行数,单词数和字符数 |
| wc filename | 统计filename文件中的行数,单词数和字符数 |
| wc -c | 输入字符串,Ctrl+d结束,统计字符数 |
| wc -w | 输入字符串,Ctrl+d结束,统计单词数 |
| wc -l | 输入字符串,Ctrl+d结束,统计行数 |
系统管理
命令 | 说明 |
---|---|
ps aux | 查看系统中的所有进程 |
top | 查看系统的健康状态,默认每3秒更新一次 |
top -d | 设置更新的秒数 |
top P | 以CPU使用率排序 |
top M | 以内存使用率排序 |
top N | 以进程号(PID)排序 |
q | 退出top |
pstree | 查看进程树 |
pstree -p | 查看进程树,并显示进程号 |
pstree -u | 查看进程树,并显示所属用户 |
kill -l | 查看可用的进程信号 |
kill PID | 正常关闭进程号为PID的进程 |
kill -n PID | 对进程号为PID的进程进行n操作,n可以通过kill -l查询 |
killall p_name | 杀死进程名为p_name的进程 |
killall p_name | 杀死进程名为p_name的进程 |
killall p_name | 杀死进程名为p_name的进程 |
command & | 将命令放在后台执行 |
command + Ctrl + z | 将命令放在后台,且不执行 |
jobs | 显示后台的进程 |
jobs -l | 显示后台的进程,并显示PID |
fg | 恢复第一个后台暂停的进程到前台执行 |
fg %work_id | 恢复工作号为work_id后台暂停的进程到前台执行,注意工作号和PID不同 |
bg | 恢复第一个后台暂停的进程到后台执行 |
bg %work_id | 恢复工作号为work_id后台暂停的进程到后台执行,注意工作号和PID不同 |
vmstat flu_time flu_num | 查看系统资源,间隔为flu_time,次数为flu_num |
free -b | 以字节为单位查看内存使用状态 |
free -k | 以KB为单位查看内存使用状态,默认以KB为单位 |
free -m | 以MB为单位查看内存使用状态 |
free -g | 以GB为单位查看内存使用状态 |
free -b | 以字节为单位查看内存使用状态 |
cat /proc/cpuinfo | 查看CPU的详细信息 |
uptime | 显示系统的启动时间和平均负载 |
uptime -a | 查看系统所有相关信息 |
uptime -r | 查看内核版本 |
uptime -s | 查看内核名称 |
file /bin/ls | 查看操作系统的位数 |
lsb_release -a | 查询Linux的发行版本 |
lsof -c string | 列出以字符串开头的进程打开的文件 |
lsof -u username | 列出某个用户的进程打开的文件 |
lsof -p pid | 列出某个PID进程打开的文件 |
定时任务
命令 | 说明 |
---|---|
crontab -e | 编辑定时任务 |
crontab -l | 查询定时任务 |
crontab -r | 删除所有定时任务 |
编辑定时任务格式
* * * * * 执行的任务
第一个*:一小时当中的第几分钟(0-59)
第二个*:一天当中的第几小时(0-23)
第三个*:一个月当中的第几天(1-31)
第四个*:一年当中的第几月(1-12)
第五个*:一周当中的星期几(0-7)
编辑定时任务特殊符号
*:代表任何时间
,:代表不连续时间
-:代表连续的时间范围
*/n:代表每隔多久执行一次
编辑定时任务例子
45 22 * * * command:每天的22:45执行命令
30 12 * * 1 command:每周一的12:30执行命令
0 8,12,16 * * * command:每天的8:00,12:00和16:00都执行命令
0 5 * * 1-6 command:每周一的5:00执行命令
0/10 4 * * * command:每天的凌晨4点,每隔10分钟执行一次
0 0 1,15 * 1 command:每周一的0:00和每个月的1号和15号都会执行命令,尽量不要这样写
备份与恢复
命令 | 说明 |
---|---|
dump -level | 设定level备份级别,0为完全备份,1-9为增量备份,对分区可以增量备份,对于文件或目录只能完全备份 |
dump -f b_file o_file | 将o_file备份到b_file中 |
dump -u | 备份成功后,把备份时间记录在/etc/dumpdates文件 |
dump -v | 显示备份过程中更多的输出信息 |
dump -j | 调用bzlib库压缩备份文件,将备份文件压缩为.bz2格式 |
dump -W | 显示允许被dump的分区的备份等级及备份时间 |
restore -C | 比较备份数据和实际数据的变换 |
restore -i | 进入交互模式,手工选择需要恢复的文件 |
restore -t | 查看模式,用于查看备份文件中拥有哪些数据 |
restore -r | 还原模式,用于数据还原 |
restore -f | 指定备份文件的文件名 |
Shell基础
Shell是一个命令行解释器,为用户提供一个向Linux内核发送请求以便运行程序的系统级程序,用户可以用Shell启动,挂起,停止甚至编写程序
Shell是一个功能强大的解释性脚本语言,易编写,易调试,灵活性强,且在Shell中可以直接调用Linux系统命令。
Bash是Linux的基本Shell,执行时使用/文件名或者bash 文件名
定义变量
命令 | 说明 |
---|---|
var_name=’xxx’ | 定义变量,等于号前后不要加空格 |
$var_name | 调用变量 |
unset var_name | 删除变量 |
set | 查看所有变量 |
echo | 输出 |
read -t n var_name | 给var_name读入一个值,等待n秒 |
read -p str var_name | 显示str字符串,再给var_name读入一个值 |
位置参数变量
命令 | 说明 |
---|---|
$n | 0代表命令本身,1-9代表第一到第九个参数,10以上要用{}括起来 |
$* | 所有参数,看作一个整体 |
$@ | 所有参数,每个参数分开对待 |
$# | 所有参数的个数 |
预定义变量
命令 | 说明 |
---|---|
$? | 判断最后一次执行命令的返回状态,为0则正确,否则错误 |
$$ | 当前进程的进程号(PID) |
$! | 后台运行的最后一个进程的进程号 |
声明变量类型
命令 | 说明 |
---|---|
declare - var_name | 给变量设定类型属性 |
declare + var_name | 取消变量的类型属性 |
declare -i var_name | 将变量声明为整型 |
declare -x var_name | 将变量声明为环境变量 |
declare -p var_name | 显示变量的类型 |
Linux中的变量都默认为字符串型,数值运算时要采用var_name=$((运算式))的格式。
条件判断
命令 | 说明 |
---|---|
[ -d filename ] | 注意中括号前后都有空格,判断文件是否存在,并且是否为目录文件,是目录文件为真 |
[ -e filename ] | 判断文件是否存在,存在为真 |
[ -f filename ] | 判断文件是否存在,并且是否为普通文件,是普通文件为真 |
[ -r filename ] | 判断文件是否存在,并且是否具有读权限(无论是拥有者还是所属组还是其他用户,只要有就为真) |
[ -w filename ] | 判断文件是否存在,并且是否具有写权限 |
[ -x filename ] | 判断文件是否存在,并且是否具有执行权限 |
[ filename1 -nt filename2 ] | 判断文件1是否比文件2新(修改时间) |
[ filename1 -ot filename2 ] | 判断文件1是否比文件2旧 |
[ filename1 -ef filename2 ] | 判断文件1和文件2的i节点是否一致,可以判断硬链接 |
[ int1 -eq int2 ] | 判断整数1是否等于整数2 |
[ int1 -ne int2 ] | 判断整数1是否不等于整数2 |
[ int1 -gt int2 ] | 判断整数1是否大于整数2 |
[ int1 -lt int2 ] | 判断整数1是否小于整数2 |
[ int1 -ge int2 ] | 判断整数1是否大于等于整数2 |
[ int1 -le int2 ] | 判断整数1是否小于等于整数2 |
[ -z str ] | 判断字符串是否为空 |
[ -n str ] | 判断字符串是否非空 |
[ str1==str2 ] | 判断字符串1是否等于字符串2 |
[ str1!=str2 ] | 判断字符串1是否不等于字符串2 |
[ judge1 -a judge2 ] | 逻辑与,判断1和判断2都为真则为真 |
[ judge1 -o judge2 ] | 逻辑或,判断1和判断2都为假则为假 |
[ !judge ] | 逻辑非,判断取反 |
流程控制
Linux中Shell脚本的第一句为#!bin/bash,说明下面的内容都是Shell脚本。
执行脚本时,先将文件的权限变为可执行文件,然后./filename或者直接使用bash filename
if条件流程控制
1 | # 单分支if条件语句格式 |
case条件流程控制
1 | # 多分支case条件语句 |
for循环流程控制
1 | # for 变量 in value1 value2 ... |
while循环流程控制
1 | # while [ condition ] |
until循环流程控制
1 | # until [ condition ] |
Linux小结
因为Linux的安全性和开源特性,使得Linux受到广泛的青睐,尤其是在公司层面。在个人机上,多数人为了使用方便,采用Windows系统。但是为了公司服务器运维稳定,可靠,方便,Linux是使用最广泛的操作系统。因此学会Linux是程序员的必修课之一。